// src/utils/request.js
import axios from "axios";

// 直接创建 axios 实例
const instance = axios.create({
  baseURL: "/api",
  timeout: 5000,
});

export default instance;

// import axios from "axios";
// import Vue from "vue";
// import router from "../router";

// //  创建axios实例
// const service = axios.create({
//   baseURL: "/api", // 从环境变量获取基础 API 地址
//   timeout: 5000, // 请求超时时间
// });

// /*
// service.interceptors.request.use() 方法用于注册请求拦截器
// config => {}：第一个是请求成功时的处理函数
// error => {}：第二个是请求错误时的处理函数
// 实际应用场景
// 身份认证：自动添加认证token（如JWT）
// 请求加密：对请求数据进行统一加密
// 参数处理：统一添加时间戳、签名等参数
// 内容类型设置：统一设置Content-Type等头信息
// 请求日志：记录发出的请求信息
// */
// // 请求拦截器
// service.interceptors.request.use(
//   (config) => {
//     // 在发送请求之前做什么
//     // 例如：如果有token，添加到请求头
//     const token = localStorage.getItem("token"); // 获取token，从浏览器的localStorage中获取名为'token'的值
//     if (token) {
//       config.headers["Authorization"] = `Bearer ${token}`; // 如果token存在，将其添加到请求头的Authorization字段中，格式为Bearer <token>
//     }
//     return config; // 返回配置：必须返回处理后的config对象，否则请求将无法发出
//   },
//   // 这个函数在请求拦截阶段发生错误时被调用
//   (error) => {
//     // 对请求错误做些什么
//     console.log(error); // 打印错误信息用于调试
//     return Promise.reject(error); // 必须返回一个被拒绝的Promise，以便错误能够继续传递
//   }
// );

// /*
// 1.统一错误处理：避免在每个请求中重复处理相同的错误逻辑。
// 2.简化成功响应：直接返回有用的数据部分，减少模版代码。
// 3.用户友好提示：对所有可能的错误情况提供清晰的提示信息。
// 4.安全处理：对于未授权或权限不足的情况自动跳转登陆页。
// 5.错误分类：根据不同的错误类型提供不同的处理方式。
//  */

// // 响应拦截器
// service.interceptors.response.use(
//   (response) => {
//     // 对响应数据做点什么
//     const res = response.data; // 从响应对象中提取出实际的数据部分。
//     // 假设后段返回的数据格式为{code: 200, message: 'success', data: {}}
//     if (res.code !== 200) {
//       // 检查后端返回的业务状态码（这里假设200表示成功）
//       // 处理业务逻辑错误
//       Vue.prototype.$message.error(res.message || "Error"); // 使用Vue的全局消息提示显示错误信息

//       // 特定状态码处理
//       if (res.code === 401 || res.code === 403) {
//         // 对于401(未授权)和403(禁止访问)状态码，跳转到登陆页
//         // 未授权或权限不足，跳转到登陆页
//         router.push("/login");
//       }
//       return Promise.reject(new Error(res.message || "Error")); // 返回一个被拒绝的Promise，这样调用方可以通过catch捕获这个错误
//     } else {
//       return res.data; // 对于成功的响应，直接返回数据部分，这样调用方可以直接使用有用的数据而不需要处理外层包装。
//     }
//   },
//   (error) => {
//     // 对响应错误做点什么
//     console.log("err" + error);

//     // HTTP 状态码管理
//     if (error.response) {
//       switch (error.response.status) {
//         case 400:
//           error.message = "请求错误";
//           break;
//         case 401:
//           error.message = "未授权，请登陆";
//           router.push("/login");
//           break;
//         case 403:
//           error.message = "拒绝访问";
//           break;
//         case 404:
//           error.message = `请求地址错误：${error.response.config.url}`;
//           break;
//         case 500:
//           error.message = "服务器内部错误";
//           break;
//         default:
//           error.message = `连接错误${error.response.status}`;
//       }
//     } else if (error.request) {
//       // 请求已发出，但没有收到响应
//       error.message = "网络连接异常，请检查网络"; // 使用Vue的全局消息提示显示错误信息。
//     } else {
//       // 其他错误
//       error.message = error.message || "未知错误";
//     }
//     Vue.prototype.$message.error(error.message);
//     return Promise.reject(error); // 将错误信息继续抛出，这样调用方法通过catch捕获并处理特定错误。
//   }
// );

// export default service;
